/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package cn.ac.iie.di.ban.ycl.ybk.e2p.yb.tools;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;

import org.apache.log4j.Logger;

/**
 * 用于处理Runtime.getRuntime().exec产生的错误流及输出流
 *
 * @author dell
 *
 */
public class StreamGobbler extends Thread {

    private static Logger logger = Logger.getLogger(StreamGobbler.class);

    InputStream is;
    String type;
    OutputStream os;

    StreamGobbler(InputStream is, String type) {
        this(is, type, null);
    }

    StreamGobbler(InputStream is, String type, OutputStream redirect) {
        this.is = is;
        this.type = type;
        this.os = redirect;
    }

    public void run() {
        InputStreamReader isr = null;
        BufferedReader br = null;
        PrintWriter pw = null;
        try {
            if (os != null) {
                pw = new PrintWriter(os);
            }

            isr = new InputStreamReader(is);
            br = new BufferedReader(isr);
            String line = null;
            while ((line = br.readLine()) != null) {
                if (pw != null) {
                    pw.println(line);
                }
                logger.info(type + ">" + line);
            }

            if (pw != null) {
                pw.flush();
            }
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        } finally {
            try {
                if (pw != null) {
                    pw.close();
                }
            } catch (Exception e) {
                logger.error("close error: " + e.getMessage(), e);
            }
            try {
                if (br != null) {
                    br.close();
                }
            } catch (Exception e) {
                logger.error("close error: " + e.getMessage(), e);
            }
            try {
                if (isr != null) {
                    isr.close();
                }
            } catch (Exception e) {
                logger.error("close error: " + e.getMessage(), e);
            }
        }
    }
}
